Generally, it is considered good software design practice to separate the data handling from the application logic within an application. To accommodate this practice, the application selects what data is requested and what data is changed or deleted, but then must delay the information for later update to the database. Sometimes retaining this information for later update is impractical or impossible for the application. As a result, the database is updated during some business processes. If an error then occurs during the further processing of the business logic, the database update needs to be undone or rolled back to its prior state. The case becomes even more complex and potentially error prone when additional applications support each other. Moreover, either the application must be programmed to support a simulation mode or simulations will result in database changes that must be subsequently rolled back.